#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos 
import sys, gtk, pygame, utils, objetos
from pygame.locals import *

# Constantes

# Clases
# ---------------------------------------------------------------------
        
class Linea:
	def __init__(self,texto,posx,posy):
		self.text,self.rect = utils.textotls(texto, posx,posy,15,(0,0,0))

class LineaA:
	def __init__(self,texto,posx,posy,color):
		self.text,self.rect = utils.textotls(texto, posx,posy,14,color)


class Actor(pygame.sprite.Sprite):
	def __init__(self,posx,posy,url,valor):
		self.image = utils.load_image(url,True)
		self.rect = self.image.get_rect()
		self.rect.centerx = posx
		self.rect.centery = posy
		self.x_ini = posx
		self.y_ini = posy
		self.valor = valor
		self.drag = False
		self.correcto = False 
		self.sonido_correcto = pygame.mixer.Sound("sounds/click.wav")
		self.sonido_fallo = pygame.mixer.Sound("sounds/fallo.wav")

class Match:
	def __init__(self,posx,posy,url,valor):
		self.image = utils.load_image(url,True)
		self.rect = self.image.get_rect()
		self.rect.centerx = posx
		self.rect.centery = posy
		self.valor = valor
		self.posx = posx
		self.posy = posy
		self.ocupado = False


class Casete:
	def __init__(self,posx,posy,url):
		self.image = utils.load_image(url,True)
		self.rect = self.image.get_rect()
		self.rect.centerx = posx
		self.rect.centery = posy
		

# ---------------------------------------------------------------------

def detectar_arrastre(actores):
	x,y = pygame.mouse.get_pos()
	for item in actores:
		if(item.rect.collidepoint(pygame.mouse.get_pos()) and item.correcto == False):
			item.drag = True
			print("detectado")
			

def soltar(actores, actores_match):
	for actor in actores:
		if actor.drag == True:
			actor.drag = False
			#print("Suelta letra")
			for match in actores_match:
				# si esta en el lugar correcto fija la letra en cuestion en esa posicion
				if actor.valor == match.valor and abs(actor.rect.centerx - match.posx) < 10 and abs(actor.rect.centery - match.posy) < 10 and match.ocupado == False:
					actor.rect.centerx = match.posx
					actor.rect.centery = match.posy
					actor.correcto = True
					#print("iguales "+letra.valor+"-"+match.valor)
					match.ocupado = True
					actor.sonido_correcto.play()
					break
			# si no se encuentra en el lugar correcto entonces la letra vuelve a la posicion original		
			if(actor.correcto == False):
					actor.rect.centerx = actor.x_ini
					actor.rect.centery = actor.y_ini
					actor.sonido_fallo.play()
					#print("vuelve a la posicion original")

#mueve las letras si estan siendo arrastradas por el mouse
def actualizar_actores(actores):
	for item in actores:
		if(item.drag == True):
			item.rect.centerx,item.rect.centery = pygame.mouse.get_pos()

# verifica si las palabras estan ordenadas			
def ejercicios_completos(actores):
	for item in actores:
		if item.correcto == False:
			return False				
	#print("Palabra ordenada")
	return True	
	

# ---------------------------------------------------------------------
def dibujar(screen,cursor_picture, clock):
    salir = 0
    background_image = utils.load_image('images/fondo_4.jpg')
    btn_adelante = objetos.BotonAdelante()
    btn_atras = objetos.BotonAtras()
    
    
    clase, clase_rect = utils.texto_clase("Clase 4", 740*utils.RES, 30*utils.RES)
           
    titulo, titulo_rect = utils.texto_subtitulo_azul("¿QUIÉN DIJO QUÉ?", 230*utils.RES, 65*utils.RES)
    
    frame = 0
    beto = utils.load_image('images/c4_3a.jpg')
    
    bloque1 = ( Linea('Beto y Trueno estuvieron entrevistando a distintos actores sociales. Las', 540*utils.RES,50*utils.RES),
    Linea('grabaciones de cada casete con entrevistas se les mezclaron y ahora no', 541*utils.RES,65*utils.RES),
    Linea('saben quién es quién. Ayudemos a poner un poco de orden anotando', 537*utils.RES,80*utils.RES),
    Linea('en cada casete, el actor social correspondiente:', 471*utils.RES,95*utils.RES))
    
    actores = (Actor(240*utils.RES,165*utils.RES,'images/c4_3b.jpg',1),
    Actor(340*utils.RES,165*utils.RES,'images/c4_3c.jpg',2),
    Actor(440*utils.RES,165*utils.RES,'images/c4_3d.jpg',3),
    Actor(540*utils.RES,165*utils.RES,'images/c4_3e.jpg',4),
    Actor(640*utils.RES,165*utils.RES,'images/c4_3f.jpg',5))
    
    actores_match = (Match(165,285,'images/c4_3c.jpg',2),
    Match(280*utils.RES,285*utils.RES,'images/c4_3b.jpg',1),
    Match(390*utils.RES,285*utils.RES,'images/c4_3d.jpg',3),
    Match(510*utils.RES,285*utils.RES,'images/c4_3e.jpg',4),
    Match(620*utils.RES,285*utils.RES,'images/c4_3f.jpg',5))

    casetes = (Casete(165*utils.RES,460*utils.RES,'images/c4_3g.jpg'),
    Casete(280*utils.RES,460*utils.RES,'images/c4_3h.jpg'),
    Casete(395*utils.RES,460*utils.RES,'images/c4_3i.jpg'),
    Casete(510*utils.RES,460*utils.RES,'images/c4_3j.jpg'),
    Casete(625*utils.RES,460*utils.RES,'images/c4_3k.jpg'))
    
    actor1 = ( LineaA('“Yo cuido de no', 160*utils.RES,355*utils.RES,(140,120,10)),
    LineaA('dejar la canilla', 160*utils.RES,370*utils.RES,(140,120,10)),
    LineaA('abierta mucho', 160*utils.RES,385*utils.RES,(140,120,10)),
    LineaA('tiempo en el baño', 160*utils.RES,400*utils.RES,(140,120,10)),
    LineaA('y en la cocina.”', 160*utils.RES,415*utils.RES,(140,120,10)))
    
    actor2 = ( LineaA('“Yo tengo la función', 280*utils.RES,355*utils.RES,(255,50,100)),
    LineaA('de sancionar y', 280*utils.RES,370*utils.RES,(255,50,100)),
    LineaA('hacer cumplir le-', 280*utils.RES,385*utils.RES,(255,50,100)),
    LineaA('yes que protejan', 280*utils.RES,400*utils.RES,(255,50,100)),
    LineaA('el medio ambiente.”', 280*utils.RES,415*utils.RES,(255,50,100)))
    
    actor3 = ( LineaA('“Aquí se fabrican', 400*utils.RES,355*utils.RES,(0,255,0)),
    LineaA('productos cumpliendo', 400*utils.RES,370*utils.RES,(0,255,0)),
    LineaA('con las leyes', 400*utils.RES,385*utils.RES,(0,255,0)),
    LineaA('ambientales y', 400*utils.RES,400*utils.RES,(0,255,0)),
    LineaA('sin contaminar”', 400*utils.RES,415*utils.RES,(0,255,0)))
    
    actor4 = ( LineaA('“Mi tarea es desa',510*utils.RES,355*utils.RES,(255,0,0)),
    LineaA('rrollar nuevas', 510*utils.RES,370*utils.RES,(255,0,0)),
    LineaA('tecnologías para', 510*utils.RES,385*utils.RES,(255,0,0)),
    LineaA('que haya menos', 510*utils.RES,400*utils.RES,(255,0,0)),
    LineaA('contaminación”', 510*utils.RES,415*utils.RES,(255,0,0)))
    
    actor5 = ( LineaA('“Nosotros nos agru-', 625*utils.RES,355*utils.RES,(50,50,255)),
    LineaA('pamos para hacer', 625*utils.RES,370*utils.RES,(50,50,255)),
    LineaA('campañas que', 625*utils.RES,385*utils.RES,(50,50,255)),
    LineaA('ayuden a cuidar', 625*utils.RES,400*utils.RES,(50,50,255)),
    LineaA('el medio ambiente.”', 625*utils.RES,415*utils.RES,(50,50,255)))
    
    while salir == 0:
    
    	# Pump GTK messages.sub
		while gtk.events_pending():
			gtk.main_iteration()
			
		for eventos in pygame.event.get():
			if eventos.type == QUIT:
				sys.exit(0)
			elif eventos.type == pygame.VIDEORESIZE:
			   pygame.display.set_mode(eventos.size, pygame.RESIZABLE)	
			elif eventos.type == MOUSEBUTTONDOWN:
				if btn_adelante.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 4
					btn_adelante.sonido.play()	
				elif btn_atras.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 2					
					btn_atras.sonido.play()	
				detectar_arrastre(actores)	
			elif eventos.type == MOUSEBUTTONUP:
				soltar(actores,actores_match)			
		
		# Realiza la animacion del texto
		actualizar_actores(actores)
		
		screen.blit(background_image, (0, 0))
		screen.blit(clase, clase_rect)
		screen.blit(beto, (35*utils.RES,40*utils.RES))
		screen.blit(titulo, titulo_rect)
		for texto in bloque1:
			screen.blit(texto.text,texto.rect)	
		for actor in actores:	
			screen.blit(actor.image, actor.rect)	
		#for actor in actores_match:	
		#	screen.blit(actor.image, actor.rect)	
		for casete in casetes:	
			screen.blit(casete.image, casete.rect)
		for texto in actor1:
			screen.blit(texto.text,texto.rect)	
		for texto in actor2:
			screen.blit(texto.text,texto.rect)						
		for texto in actor3:
			screen.blit(texto.text,texto.rect)							
		for texto in actor4:
			screen.blit(texto.text,texto.rect)							
		for texto in actor5:
			screen.blit(texto.text,texto.rect)									
		screen.blit(btn_adelante.image, btn_adelante.rect)
		screen.blit(btn_atras.image, btn_atras.rect)
		screen.blit(cursor_picture, pygame.mouse.get_pos())
		pygame.display.flip()

		# Try to stay at 30 FPS
		clock.tick(30)
		frame = frame + 1
                	 
    return salir

# This function is called when the game is run directly from the command line:
# ./TestGame.py 
def main():
	
	pygame.init()
	screen = pygame.display.set_mode((int(800*utils.RES), int(520*utils.RES)), pygame.RESIZABLE) #pygame.display.get_surface() #

	# Fake a Sugar cursor for the pyGame canvas area
	pygame.mouse.set_cursor((8,8),(0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))
	cursor_picture = pygame.image.load('images/standardcursor.png')
	cursor_picture.convert_alpha() 
	clock = pygame.time.Clock()
	dibujar(screen,cursor_picture,clock)

if __name__ == '__main__':
   main()
